package a_direct;

import com.rabbitmq.client.*;
import org.junit.Test;

import java.io.IOException;
import java.util.Arrays;

/**
 * @ClassName: Producer
 * @Author: liugui
 * @Date: 2020-12-01 21:39
 * @Description：消息消费者
 **/
public class Consumer {

    @Test
    public void consumeMessage() throws Exception{
        //1.创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //2.设置连接参数
        // factory.setVirtualHost();  默认= /
        factory.setHost("127.0.0.1");
        factory.setPort(5672);
        factory.setUsername("admin");
        factory.setPassword("123456");
        //3.从连接工厂 创建连接
        Connection connection = factory.newConnection();
        //4.创建通道
        Channel channel = connection.createChannel();
        /**
         * 5.绑定队列
         * 参数1：队列名  如果发送消息时，队列在MQ里面不存在，它会创建一个新的队列
         * 参数2：是否持久化 如果为false，当MQ重启时，消息会丢失
         * 参数3：是否独享 ，true代表只有当前连接可以访问这个队列
         * 参数4：是否自动删除，是否用完之后 删除该队列
         * 参数5：其他参数
         */
        channel.queueDeclare("hello",true,false,false,null);
        /**
         * 6.接消息
         * 参数1：队列名
         * 参数2：是否自动签收
         * 参数3：回调
         */
        channel.basicConsume("hello",true,new DefaultConsumer(channel){
            /**
             *
             * @param consumerTag
             * @param envelope
             * @param properties
             * @param body 消息体
             * @throws IOException
             */
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("消费者接收到消息：" + new String(body));
            }
        });

        //不能让程序结束 打印回调
        System.in.read();

    }

}
